// const mysql = require('mysql');
// module.exports = {
//     config: {
//         host: 'localhost',//连接数据库的地址。（默认：localhost）
//         port: 3306,//连接地址对应的端口。（默认：3306）
//         user: 'root',//mysql的连接用户名
//         password: 'root',//对应用户的密码
//         database: 'flatsmanage' //所需要连接的数据库的名称
//     },
//     connect(sql, params, cb) {      //connect('sql语句',[参数],回调函数（err,data){})
//         let conn = mysql.createConnection(this.config);//1。创建数据库
//         conn.connect();//2.连接数据库
//         conn.query(sql, params, cb);//3.执行sql语句,第二个参数是一个数据格式，数组元素的先后顺序，对应sql语句中的？的顺序
//         conn.end();//4。关闭数据库
//     }

// }

const mysql = require("mysql");
//链接池
const pool = mysql.createPool({
  host: "localhost",
  user: "root",
  password: "root",
  database: "mystage",
  //可选
  // queueLimit: 3,
  // connectionLimit: 20,
});

//添加一个query方法
let query = function (sql, callback) {
  pool.getConnection((err, conn) => {
    if (err) {
      console.log(err);
      return;
    }
    conn.query(sql, (err, data) => {
      if (err) {
        console.log(err);
        return;
      }
      if (callback) {
        callback(data);
      }
    });
  });
};

/**
 * 插入数据
 * @param {*} table 表名
 * @param {*} datas 数据对象
 * @param {*} callBack 插入成功后的回调函数
 */
let insert = (table, datas, callback) => {
  //拼接SQL
  let fields = ""; //字段
  let values = ""; //值
  for (const k in datas) {
    fields += k + ","; //拼接字段
    values += `'${datas[k]}',`;
  }
  //清楚最后一位的逗号；
  fields = fields.slice(0, -1);
  values = values.slice(0, -1);
  console.log(fields)
  console.log(values)
  let sql = `INSERT INTO ${table} (${fields}) VALUES (${values})`;
  query(sql, callback);
};

//封装一个删除sql方法
let del = (table, datas, callBack) => {
  let arr = ["1=1"]; //避免datas为空时，出现异常错误。
  for (const k in datas) {
    arr.push(`${k} = '${datas[k]}'`);
  }
  let sql = `delete from ${table} where ${arr.join(" and ")}`;
  query(sql, callBack);
};

/**
 * 修改方法
 * @param {string} table 表名
 * @param {object} sets 修改的字段与值
 * @param {object} wheres 判断条件
 * @param {Function} callBack 回调函数
 */
let update = (table, sets, wheres, callBack) => {
  //准备一个数组，用来拼接 where子句
  let whereArr = ["1=1"]; //避免datas为空时，出现异常错误。
  for (const k in wheres) {
    whereArr.push(`${k} = '${wheres[k]}'`);
  }
  //准备一个数组，用来拼接 set 子句
  let setArr = [];
  for (const k in sets) {
    setArr.push(`${k} = '${sets[k]}'`);
  }
  let sql = `UPDATE ${table} SET ${setArr.join(",")}  WHERE ${whereArr.join(
    " and "
  )}`;
  query(sql, callBack);
};

// 导出
module.exports = {
  query,
  insert,
  del,
  update,
};
